import {
	baseUrl,
	// baseUploadPath
} from '@/request/config.js';
/**
 * @description:  验证手机号是否合格
 * @param {*} phoneStr  手机号
 * @return true 合格
 */
export function isPhone(phoneStr) {
	return /^1\d{10}$/.test(phoneStr)
}
/**
 * @description: 验证邮箱
 * @param {*} email 邮箱
 * @return true 合格
 */
export function checkEmail(email) {
	return RegExp(/^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/).test(
		email);
}

/**
 * @description: 验证身份证号是否合格
 * @param {*} idCardStr 生份证号
 * @return true 说明合格
 */
export function isIdCard(idCardStr) {
	let idcardReg =
		/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;
	return idcardReg.test(idCardStr);
}

/**
 * @description:  验证字符串是否为空
 * @param {*} string 
 * @return ture 说明为空 false 说明不为空
 */
export function isEmptyString(string) {
	if (
		string == undefined ||
		typeof string == 'undefined' ||
		!string ||
		string == null ||
		string == '' ||
		/^\s+$/gi.test(string)
	) {
		return true;
	} else {
		return false;
	}
}

// 验证是否为数字
export function isNumber(n) {
	return !isNaN(parseFloat(n)) && isFinite(n);
}

// 是否为数组
export function isArray(obj) {
	return Object.prototype.toString.call(obj) === '[object Array]';
}

//  是否为空数组
export function isArrayEmpty(val) {
	if (val && val instanceof Array && val.length > 0) {
		return false;
	} else {
		return true;
	}
}
/**
 * @description: 获取url参数字符串没有返回null
 * @param {*} name 路径
 */
export function getQueryString(name) {
	let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
	let r = window.location.search.substr(1).match(reg);
	if (r != null) {
		return unescape(r[2]);
	}
	return null;
}

/**
 * @description  函数防抖，用于将多次执行变为最后一次执行
 * @param {function} func - 需要使用函数防抖的被执行的函数。必传
 * @param {Number} wait - 多少毫秒之内触发，只执行第一次，默认1000ms。可以不传
 */
export function debounce(fn, delay) {
	delay = delay || 1000; //默认1s后执行
	let timer = null;
	return function() {
		let context = this;
		let arg = arguments;
		if (timer) {
			clearTimeout(timer);
		}
		timer = setTimeout(() => {
			fn.apply(context, arg);
		}, delay);
	};
}
/**
 * @description  节流函数, 用于将多次执行变为每隔一段时间执行
 * @param fn 事件触发的操作
 * @param delay 间隔多少毫秒需要触发一次事件
 */
export function throttle(fn, delay) {
	let timer = null;
	return () => {
		let context = this;
		let args = arguments;
		if (!timer) {
			timer = setTimeout(() => {
				fn.apply(context, args);
				clearTimeout(timer);
			}, delay);
		}
	};
}

/**
 * @description uniapp 预览图片
 * @url 图片路径
 * @current 索引
 */
export function previewImage(url, current) {
	var urls = [];
	if (typeof url == 'string') urls.push(url)
	else urls = url
	uni.previewImage({
		urls,
		current: current ? current : 0
	})
}
/**
 * @description  格式化手机号
 **/
export function formatPhone(phone) {
	let tel = phone.slice(0, 3) + '****' + phone.slice(7, 11);
	return tel;
}
/**
 * @description:  uniapp 复制
 * @param {String} info
 */
export function copyText(info) {
	var result;
	// #ifndef H5
	//uni.setClipboardData方法就是讲内容复制到粘贴板
	uni.setClipboardData({
		data: info, //要被复制的内容
		success: () => { //复制成功的回调函数
			uni.showToast({ //提示
				title: '复制成功',
				icon: "none"
			})
		}
	});
	// #endif

	// #ifdef H5 
	let textarea = document.createElement("textarea")
	textarea.value = info
	textarea.readOnly = "readOnly"
	document.body.appendChild(textarea)
	textarea.select() // 选中文本内容
	textarea.setSelectionRange(0, info.length)
	uni.showToast({ //提示
		title: '复制成功',
		icon: "none"
	})
	result = document.execCommand("copy")
	textarea.remove()
	// #endif
}

/**
 * @description:  获取年-月-日
 * @param {String} data  时间戳
 */
export function getDates(data) {
	let timeObj = {};
	data = new Date(data);
	let y = data.getFullYear();
	let m =
		data.getMonth() + 1 < 10 ?
		'0' + (data.getMonth() + 1) :
		data.getMonth() + 1;
	let d = data.getDate() < 10 ? '0' + data.getDate() : data.getDate();
	let w = data.getDay();
	switch (w) {
		case 1:
			w = '星期一';
			break;
		case 2:
			w = '星期二';
			break;
		case 3:
			w = '星期三';
			break;
		case 4:
			w = '星期四';
			break;
		case 5:
			w = '星期五';
			break;
		case 6:
			w = '星期六';
			break;
		case 7:
			w = '星期日';
			break;
	}
	let h = data.getHours() < 10 ? '0' + data.getHours() : data.getHours();
	let mi = data.getMinutes() < 10 ? '0' + data.getMinutes() : data.getMinutes();
	let s = data.getSeconds() < 10 ? '0' + data.getSeconds() : data.getSeconds();
	// 年月日 星期几 时分秒
	timeObj = {
		year: y + '',
		month: m + '',
		day: d + '',
		week: w + '',
		hour: h + '',
		minute: mi + '',
		second: s + ''
	};
	return timeObj;
}

/**
 *  @description 页面跳转
 */
export function urlTo(e) {
	uni.navigateTo({
		url: e
	})
}
// 需要登录的跳转
export function loginUrlTo(path) {
	if (!uni.getStorageSync('token')) {
		uni.showModal({
			title: '提示',
			content: '暂未登录/登录已失效，请重新登录',
			cancelText: "取消",
			confirmText: '登录',
			success: (res) => {
				if (res.confirm) {
					uni.reLaunch({
						url: '/pages/login/login'
					})
				} else if (res.cancel) {
					console.log('用户点击取消');
				}
			}
		});
	} else {
		uni.navigateTo({
			url
		})
	}
}

/**
 * @description 页面跳转
 */
export function switchTo(e) {
	uni.switchTab({
		url: e
	})
}



/**
 * @description: 微信支付宝拉取支付
 * @param {String} provider 支付方式
 * @param {Object} orderInfo 支付参数
 * @return uni回调
 */
export function uniPay(provider, orderInfo) {
	return new Promise(function(resolve, reject) {
		// #ifdef APP-PLUS
		// APP
		uni.requestPayment({
			provider,
			orderInfo,
			success(res) {
				resolve(res);
			},
			fail(err) {
				reject(err);
			}
		});

		// #endif

		// #ifdef MP-WEIXIN
		// 微信小程序
		uni.requestPayment({
			provider: 'wxpay',
			'timeStamp': orderInfo.timeStamp, // 时间戳从1970年1月1日至今的秒数，即当前的时间。
			'nonceStr': orderInfo.nonceStr, // 随机字符串，长度为32个字符以下
			'package': orderInfo.package, // 统一下单接口返回的 prepay_id 参数值，提交格式如：prepay_id=xx
			'signType': orderInfo.signType, // 签名算法，应与后台下单时的值一致
			'paySign': orderInfo.paySign, // 签名，具体签名方案参见 微信小程序支付文档
			success(res) {
				resolve(res);
			},
			fail(err) {
				reject(err);
			}
		})
		//	#endif

	});
}

/**
 * @description:  h5支付宝支付
 * @param {Object} data 后端返回form表单
 */
export function h5Alipay(data) {
	document.querySelector('body').innerHTML = data;
	document.forms[0].submit();
}

/**
 * @description:   h5 微信内微信支付
 * @param {Object} data  后端返回参数
 */
export function h5Wxpay(data) {
	return new Promise(function(resolve, reject) {
		function onBridgeReady() {
			WeixinJSBridge.invoke(
				'getBrandWCPayRequest', {
					"appId": data.appId,
					"timeStamp": data.timeStamp,
					"nonceStr": data.nonceStr,
					"package": data.packageValue,
					"signType": data.signType,
					"paySign": data.paySign
				},
				function(res) {
					if (res.err_msg == "get_brand_wcpay_request:ok") {
						// 支付成功
						// console.log("utis----h5Wxpay---resolve: ", resolve);
						resolve(res);
					} else {
						// 支付失败
						// console.log("utis----h5Wxpay---resolve: ", resolve);
						uni.showToast({
							title: '支付失败',
							icon: 'none'
						})
					}
				});
		}
		if (typeof WeixinJSBridge == "undefined") {
			if (document.addEventListener) {
				document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
			} else if (document.attachEvent) {
				document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
				document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
			}
		} else {
			onBridgeReady();
		}
	});
}
/**
 * 上传图片
 * @param count
 * @param sizeType
 * @param sourceType
 * @return {Promise<unknown>}
 */
export function uploadImage(count = 1, sizeType = ["original", "compressed"], sourceType = ["album", "camera"]) {
	return new Promise(resolve => {
		uni.chooseImage({
			count: count,
			sizeType: sizeType,
			sourceType: sourceType,
			success: (res) => {
				uni.showLoading({
					title: '上传中...'
				});
				let tempList = [];
				for (let i in res.tempFiles) {
					uni.uploadFile({
						url: baseUrl + 'api/common/upload',
						filePath: res.tempFiles[i].path,
						name: "file",
						header: {
							token: uni.getStorageSync('token')
						},
						success: (resIn) => {
							let resData = JSON.parse(resIn.data)
							tempList.push(resData.data);

							if (tempList.length === res.tempFiles.length) {
								setTimeout(() => {
									uni.$u.toast('上传成功');
									uni.hideLoading()
									resolve(tempList);
								}, 1500);
							}
						},
						fail: (errIn) => {
							setTimeout(() => {
								uni.$u.toast('上传失败')
							}, 1500);
						}
					})
				}
			}
		})
	})
}

/**
 * @description: 保存图片
 * @param {String} filePath 图片路径
 */
export function saveImg(filePath) {
	// #ifdef APP-PLUS || MP-WEIXIN
	uni.downloadFile({
		url: url,
		success: res => {
			if (res.statusCode === 200) {
				uni.saveImageToPhotosAlbum({
					filePath: res.tempFilePath,
					success: function() {
						uni.showToast({
							title: '保存成功',
							icon: 'none'
						});
					},
					fail: function(err) {
						uni.showToast({
							title: '保存失败',
							icon: 'none'
						});
					}
				});
			} else {
				uni.showToast({
					title: '保存失败，请稍后重试',
					icon: 'none'
				})
			}
		},
		fail(err) {

		}
	})
	// #endif
	// #ifdef H5 
	const aEle = document.createElement('a');
	aEle.download = '图片'; // 设置下载的文件名
	aEle.href = this.filePath;
	document.body.appendChild(aEle);
	aEle.click();
	aEle.remove(); // 下载之后把创建的元素删除
	// #endif
}


/**
 * @description: 数字转单位
 * @param {Number} value
 */
export function bigNumberTransform(value = 0) {
	if (value) {
		if (parseFloat(value) < 10000) return value.toString();
		const result = (parseFloat(value) / 10000).toFixed(2);
		return `${result}w`;
	} else {
		return 0
	}
}

/**
 * @description: app打开微信小程序
 * @param {Object} data
 */
export function openWeAppInfo(data) {
	let {
		path,
		weUserName
	} = data;
	plus.share.getServices(
		res => {
			let sweixin = null;
			for (let i in res) {
				if (res[i].id == 'weixin') {
					sweixin = res[i];
				}
			}
			//唤醒微信小程序
			if (sweixin) {
				sweixin.launchMiniProgram({
					id: weUserName, //微信开放平台 --- 绑定的微信小程序的 --- 原始id
					type: 0, //小程序版本  0-正式版； 1-测试版； 2-体验版。
					path: path //小程序的页面,用传的参数在小程序接值判断跳转指定页面
				});
			} else {
				console.log("未安装微信逻辑")
			}
		}
	);
}
/**
 * @description: app 打开app
 * @param {String} path
 */
export function openPlatform(path) {
	plus.runtime.openURL(path, err => {
		if (err) console.log(err);
	});
}

/**
 * @description: 获取应用缓存
 * @return
 */
export function formatSize() {
	plus.cache.calculate((size) => {
		let sizeCache = parseInt(size);
		if (sizeCache == 0) {
			this.fileSizeString = "0B";
		} else if (sizeCache < 1024) {
			this.fileSizeString = sizeCache + "B";
		} else if (sizeCache < 1048576) {
			this.fileSizeString = (sizeCache / 1024).toFixed(2) + "KB";
		} else if (sizeCache < 1073741824) {
			this.fileSizeString = (sizeCache / 1048576).toFixed(2) + "MB";
		} else {
			this.fileSizeString = (sizeCache / 1073741824).toFixed(2) + "GB";
		}
	});
}

/**
 * @description: 清理缓存
 * @return
 */
export function clearCache() {
	let os = plus.os.name;
	if (os == 'Android') {
		let main = plus.android.runtimeMainActivity();
		let sdRoot = main.getCacheDir();
		let files = plus.android.invoke(sdRoot, "listFiles");
		let len = files.length;
		for (let i = 0; i < len; i++) {
			let filePath = '' + files[i];
			plus.io.resolveLocalFileSystemURL(filePath, (entry) => {
				if (entry.isDirectory) {
					entry.removeRecursively((entry) => {
						uni.showToast({
							title: '缓存清理完成',
							duration: 2000
						});
						formatSize();
					}, (e) => {
						console.log(e.message)
					});
				} else {
					entry.remove();
				}
			}, (e) => {
				console.log('文件路径读取失败')
			});
		}
	} else { // ios  
		plus.cache.clear(() => {
			uni.showToast({
				title: '缓存清理完成',
				duration: 2000
			});
			this.formatSize();
		});
	}
};

/**
 * @description: 获取元素信息
 * @param {String} selector
 * @param {Object} el
 * @param {Boolean} all
 * @return
 */
export function getRect(classname, delay = 100) {
	return new Promise((resolve) => {
		const query = uni.createSelectorQuery().in(this);
		setTimeout(() => {
			query.select('.' + classname).boundingClientRect(data => {
				resolve(data); // 解析 Promise 并返回数据
			}).exec();
		}, delay);
	});
}
// 拨打电话
export function call(phone) {
	uni.showModal({
		title: '提示',
		content: '确认要拨打电话吗？',
		cancelText: "取消",
		confirmText: "确定",
		success: (res) => {
			if (res.confirm) {
				uni.makePhoneCall({
					phoneNumber: phone //仅为示例
				});
			} else if (res.cancel) {
				console.log('用户点击取消');
			}
		}
	});
}
export function openhttp(url) {
	if (url) {
		// #ifdef APP-PLUS
		plus.webview.open(url)
		// uni.navigateTo({  
		//   url: `plugin://NativePlugin/webview?url=${url}`
		// });
		// #endif
		// #ifndef APP-PLUS
		// this.copy(url)
		// #endif
	} else {
		uni.showToast({
			icon: "none",
			title: "暂无链接地址"
		})
	}
}